<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // 输入: s = "pwwkew"
      // 输出: 3
      // 解释: 因为无重复字符的最长子串是 "wke"，所以其长度为 3。
      //      请注意，你的答案必须是 子串 的长度，"pwke" 是一个子序列，不是子串。
      //需要 一个左指针 li 指向连续无重复字符的开头  i为右指针
      //当有重复的值 左指针需要指向 已经存进去的重复的那个字符的下一位  重复的可能是第一个 肯定 不能往左移动只能右移,  
      //let a = "pwwkew" "abba"  'defedyu'  "abcabcbb""
      //map不会存重复的key  并且value可以记录下标

      
       
      console.log(lengthOfLongestSubstring("abba"));
      function lengthOfLongestSubstring(s) {
        let map = new Map();
        let len = s.length;
        let resLen = 0;
        let li = 0;
        for (let i = 0; i < len; i++) {
          let v = s.charAt(i);
          if (map.has(v) && li < map.get(v) + 1) {
            li = map.get(v) + 1;
          }
          map.set(v, i);

          resLen = Math.max(resLen, i - li + 1);
        }
        return resLen;
      }
    // let map = new Map()
    // map.set("年后",1)
    // map.set("年后",3)

    // 后面的值会覆盖前面的值 不会重复
    // console.log(map,"======"); // ["年后"-->3]

    </script>
  </body>
</html>
